package laboratoryQ.experiment.settings;

import laboratoryQ.experiment.IExperiment;
import laboratoryQ.experiment.process.IExperimentContextFactory;
import laboratoryQ.experiment.settings.SettingsAnnotations.Hidden;
import laboratoryQ.experiment.settings.SettingsAnnotations.Increase;
import laboratoryQ.experiment.settings.SettingsAnnotations.IgnoreWhenCheck;
import laboratoryQ.computation.IRandomFactory;
import laboratoryQ.computation.DefaultRandomFactory;

public abstract class BaseExperimentSettings extends BaseValidateAble implements IExperimentSettings {
	@Hidden
	public IExperiment experiment = null;

	@Hidden
	@IgnoreWhenCheck
	public IRandomFactory randomFactory = new DefaultRandomFactory(this);

	@Increase(value = 1, boundBegin = 0, boundEnd = Integer.MAX_VALUE)
	public double randomSeed = -1.0;

	@Hidden
	@IgnoreWhenCheck
	protected IExperimentContextFactory experimentContextFactory = null;

	@Override
	public IExperiment getExperiment() {
		return experiment;
	}

	@Override
	public IExperimentContextFactory getExperimentContextFactory() {
		return experimentContextFactory;
	}

	@Override
	public IRandomFactory getRandomFactory() {
		return randomFactory;
	}
}
